package funcionario;

import exception.FuncionarioExistenteException;
import exception.FuncionarioInexistenteException;
import funcionario.Funcionario;
import funcionario.RepositorioFuncionariosMap;
import junit.framework.TestCase;


public class TesteRepositorioFuncionarioMap 
                 extends TestCase {
	RepositorioFuncionariosMap repositorio;
	String matriculaExistente;
	Funcionario funcionarioExistente, funcionarioInexistente; 
	
	protected void setUp() throws Exception {
		super.setUp();		
		repositorio = new RepositorioFuncionariosMap();
		funcionarioExistente = new Funcionario ("maria", 123);
		funcionarioInexistente = new Funcionario ("joao",124);		
		repositorio.inserir(funcionarioExistente);		
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}

	public void testAtualizar() throws FuncionarioInexistenteException {
		funcionarioExistente.setNome("maria atualizada");
		try {
			repositorio.atualizar(funcionarioExistente);
		} catch (FuncionarioInexistenteException e) {
			fail();
		}
		Funcionario  teste = repositorio.procurar(123);
		assertEquals("maria atualizada", teste.getNome());
		}

	public void testInserir() {
			// invocar metodo a ser testado
		try {
			repositorio.inserir(funcionarioInexistente);
		} catch (FuncionarioExistenteException e) {
			fail();
		}

		assertTrue( repositorio.existe(funcionarioInexistente.getMatricula()));
	}
	
	public void testInserirDuasVezes() {
		// configurando

		try {			
			repositorio.inserir(funcionarioExistente);
			fail();
		
		} catch (FuncionarioExistenteException e) {

		}
	}	

	public void testProcurar() {
		try {
			repositorio.procurar(123);
			
		} catch (FuncionarioInexistenteException e ) {
			fail();
		}
		assertTrue(repositorio.existe(123));
	}

	public void testRemover() throws FuncionarioExistenteException {
		// invocar : remover
		 try {
			repositorio.remover(123);
		} catch (FuncionarioInexistenteException e) {
			fail();
		}
		// verificar
		assertFalse(repositorio.existe(123));
		
	}

}
